package com.yeban.base.Test;

import java.util.Scanner;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/10/2
 */
// 猜拳游戏
public class GuessGame {

    private static String playerHero = "";    // 玩家角色
    private static String robotHero = "";     // 机器人角色

    private static int playerOption = 0;   // 玩家出拳选择
    private static int robotOption = 0;    // 机器人出拳选择

    private static int playerScore = 0;    // 玩家得分
    private static int robotScore = 0;     // 机器人得分

    private static int count = 0;          // 比赛次数
    private static int drawCount = 0;      // 平局次数

    /**
     * 欢迎界面
     */
    public boolean welcome() {
        Scanner sc = new Scanner(System.in);
        System.out.println("-----------------欢迎进入羊村游戏世界-----------------");
        System.out.println();
        System.out.println("                ******************                ");
        System.out.println("                **  游戏开始  **                ");
        System.out.println("                ******************                ");
        System.out.println();
        System.out.println();
        System.out.println("出拳规则：1.石头 2.剪刀 3.布");

        // 玩家角色选择
        while(true) {
            System.out.print("请选择你的角色(1.沸羊羊 2.暖羊羊 3.美羊羊)：");
            playerHero = playerHero();
            break;
        }

        // 对手角色选择
        while(true) {
            System.out.print("请选择对手角色(1.喜羊羊 2.慢羊羊 3.懒羊羊)：");
            robotHero = robotHero();
            break;
        }

        // y/n输入判断，并做异常处理
        while(true) {
            System.out.println();
            System.out.print("开始游戏吗？(y/n) ");
            return start();
        }

    }

    /**
     * 单次出拳游戏界面
     */
    public boolean game() {
        //猜拳总次数
        count ++;

        Scanner sc = new Scanner(System.in);

        // 玩家出拳
        // 判断，并做异常处理
        while(true) {
            System.out.print("请出拳：1.石头 2.剪子 3.布 ");
            System.out.println("你出拳：" + guessOption());
            break;
        }

        // 机器人出拳
        int robotOption = (int)(Math.random()*3) + 1;
        System.out.println(robotHero + "出拳：" + guessOption(robotOption));

        // 游戏结果
        guessResult(playerOption, robotOption);

        System.out.println();
        System.out.print("是否开始下一轮？ (y/n) ");

        // y/n输入判断，并做异常处理
        while(true) {
            return start();
        }

    }

    /**
     * 是否开始下一轮界面
     */
    public boolean start() {

        Scanner sc = new Scanner(System.in);
        String select = sc.next();

        switch(select) {
            case "y":
                return true;
            case "n":
                return false;
            default:
                System.out.print("开始选项异常！请重新选择!(y/n) ");
                return start();
        }
//        if(select.equals("y")){
//            count ++;
//            return true;
//        } else if(select.equals("n")) {
//            return false;
//        } else {
//            System.out.print("开始选项异常！请重新选择!(y/n) ");
//            return start();
//        }

    }

    /**
     * 退出结算界面
     */
    public void endGame() {
        System.out.println("---------------------------------------------------");
        System.out.println("                 " + playerHero + "对决" + robotHero + "                 ");
        System.out.println();
        System.out.println("次数：" + count + "次");
        System.out.println("平局：" + drawCount + "次");
        System.out.println(playerHero + "得：" + playerScore + "分");
        System.out.println(robotHero + "得：" + robotScore + "分");
        System.out.println();

        if(playerScore == robotScore) {
            System.out.println("最终结果：双方平局！");
        } else {
            System.out.println("最终结果：" + winner() + "赢！");
        }

    }

    // 玩家英雄选择判断：1—>沸羊羊 2—>暖羊羊 3—>美羊羊
    public String playerHero() {

        Scanner sc = new Scanner(System.in);
        int hero = sc.nextInt();
        switch(hero) {
            case 1:
                return "沸羊羊";
            case 2:
                return "暖羊羊";
            case 3:
                return "美羊羊";
            default:
                System.out.println();
                System.out.println("你的角色选择异常！请重新选择!");
                System.out.print("请选择你的角色(1.沸羊羊 2.暖羊羊 3.美羊羊)：");
        }
//        if(hero == 1) {
//            return "沸羊羊";
//        } else if(hero == 2) {
//            return "暖羊羊";
//        } else if(hero == 3) {
//            return "美羊羊";
//        } else {
//            System.out.println();
//            System.out.println("你的角色选择异常！请重新选择!");
//            System.out.print("请选择你的角色(1.沸羊羊 2.暖羊羊 3.美羊羊)：");
//        }

        return playerHero();
    }

    // 机器人英雄选择判断：1—>喜羊羊 2—>慢羊羊 3—>懒羊羊
    public String robotHero() {

        Scanner sc = new Scanner(System.in);
        int hero = sc.nextInt();
        switch(hero) {
            case 1:
                return "喜羊羊";
            case 2:
                return "慢羊羊";
            case 3:
                return "懒羊羊";
            default:
                System.out.println();
                System.out.println("对手角色选择异常！请重新选择!");
                System.out.print("请选择对手角色(1.喜羊羊 2.慢羊羊 3.懒羊羊)：");
        }
//        if(hero == 1) {
//            return "喜羊羊";
//        } else if(hero == 2) {
//            return "慢羊羊";
//        } else if(hero == 3) {
//            return "懒羊羊";
//        } else {
//            System.out.println();
//            System.out.println("对手角色选择异常！请重新选择!");
//            System.out.print("请选择对手角色(1.喜羊羊 2.慢羊羊 3.懒羊羊)：");
//        }

        return robotHero();
    }

    // 猜拳结果判断：1—>石头 2—>剪子 3—>布
    public static String guessOption() {

        Scanner sc = new Scanner(System.in);
        playerOption = sc.nextInt();
        switch(playerOption) {
            case 1:
                return "石头";
            case 2:
                return "剪子";
            case 3:
                return "布";
            default:
                System.out.println();
                System.out.println("选项异常！请重新选择!");
                System.out.print("请出拳：1.石头 2.剪子 3.布 ");
        }
//        if(playerOption == 1) {
//            return "石头";
//        } else if(playerOption == 2) {
//            return "剪子";
//        } else if(playerOption == 3) {
//            return "布";
//        } else {
//            System.out.println();
//            System.out.println("选项异常！请重新选择!");
//            System.out.print("请出拳：1.石头 2.剪子 3.布 ");
//        }

        return guessOption();
    }

    public static String guessOption(int robotOption) {

        switch(robotOption) {
            case 1:
                return "石头";
            case 2:
                return "剪子";
            case 3:
                return "布";
        }
//        if(robotOption == 1) {
//            return "石头";
//        } else if(robotOption == 2) {
//            return "剪子";
//        } else if(robotOption == 3) {
//            return "布";
//        }

        return guessOption(robotOption);
    }

    // Winner判断
    public static String winner() {
        if(playerScore > robotScore) {
            return playerHero;
        }
        return robotHero;
    }

    // 单次猜拳结果输出
    public static void guessResult(int playerOption, int robotOption) {

        // 平局
        if(playerOption == robotOption) {
            drawCount ++;
            System.out.println("平局，加油啊！");
        } else {
            // 判断谁赢
            if(guessWin(playerOption, robotOption)) {
                // 玩家赢
                playerScore ++;
                System.out.println("耶！你赢了！");
            } else {
                // 机器人赢
                robotScore ++;
                System.out.println("啊！你输了！");
            }
        }

    }

    // 1—>石头 2—>剪子 3—>布
    public static boolean guessWin(int x, int y) {

        switch (x) {
            case 1:
                return y == 2;
            case 2:
                return y == 3;
            case 3:
                return y == 1;
            default:
                return false;
        }
//        if((x == 1 && y == 2) || (x == 2 && y == 3) || (x == 3 && y == 1)) {
//            return true;
//        }
//        return false;
    }

    //
    public static void main(String[] args) {

        GuessGame guessGame = new GuessGame();

        // 游戏开始
        if(guessGame.welcome()) {
            // 第一次游戏
            boolean end = guessGame.game();
            // 是否再来一次
            while(end) {
                end = guessGame.game();
            }
            // 游戏结束
            guessGame.endGame();
        } else {    // 一次游戏不开始就退出了
            System.out.println("游戏退出！");
        }

    }

}

